package br.com.tiespec.web.ManagedBean;

import java.io.Serializable;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.enterprise.context.SessionScoped;
import javax.inject.Inject;
import javax.inject.Named;

import org.primefaces.model.DefaultMenuModel;
import org.primefaces.model.MenuModel;

import br.com.tiespec.model.Modelo.ClientePortal;
import br.com.tiespec.model.Modelo.ClienteProjeto;
import br.com.tiespec.model.Modelo.Plano;
import br.com.tiespec.model.Modelo.Projeto;
import br.com.tiespec.model.Modelo.Usuario;

/**
 * Neste bean são gravadas informações sobre a sessão do usuário.
 * @author Hermann Miertschink Neto
 */
@Named("contextoBean")
@SessionScoped
public class ContextoBean implements Serializable {

	private static final long serialVersionUID = 6082063528877385753L;
	
	@Inject LoginBean loginService;
	
	private Usuario usuario;
	private ClientePortal clienteEmContexto;
	private ClienteProjeto clienteProjetoEmContexto;
	private Projeto projetoEmContexto;
	
	//Limites de Utilização
	private Plano planoCorrente;
	
	//Referentes aos data tables
	private String rowsPerPage;
	private String paginatorTemplate;
	private Integer dataTableRows;
	private String paginatorPosition;
	
	private MenuModel menu = new DefaultMenuModel();
	
	public String contexto(){
		init();
		return null;
	}
	
	@PostConstruct
	public void init(){
		usuario = new Usuario();
		dataTableRows = 5;
		rowsPerPage = "5, 10, 15";
		paginatorTemplate = "{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}";
		paginatorPosition = "bottom";
		menu = new DefaultMenuModel();
	}
	
	@PreDestroy
	public void destroy(){
		usuario = null;
		clienteEmContexto = null;
		planoCorrente = null;
		rowsPerPage = null;
		paginatorTemplate = null;
		dataTableRows = null;
		paginatorPosition = null;
	}
	
	public String goLogin(){
		init();
		return "/views/publicas/login.xhtml";
	}
	
	public String goSobre(){
		return "/views/publicas/sobre.xhtml";
	}
	
	public String goRegistrar(){
		init();
		return "/views/publicas/registrar.xhtml";
	}
	
	public Usuario getUsuario() {
		return usuario;
	}
	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}
	public Integer getDataTableRows() {
		return dataTableRows;
	}
	public void setDataTableRows(Integer dataTableRows) {
		this.dataTableRows = dataTableRows;
	}
	public String getRowsPerPage() {
		return rowsPerPage;
	}
	public void setRowsPerPage(String rowsPerPage) {
		this.rowsPerPage = rowsPerPage;
	}
	public String getPaginatorTemplate() {
		return paginatorTemplate;
	}
	public void setPaginatorTemplate(String paginatorTemplate) {
		this.paginatorTemplate = paginatorTemplate;
	}
	public ClientePortal getClienteEmContexto() {
		return clienteEmContexto;
	}
	public void setClienteEmContexto(ClientePortal clienteEmContexto) {
		this.clienteEmContexto = clienteEmContexto;
	}
	public String getPaginatorPosition() {
		return paginatorPosition;
	}
	public void setPaginatorPosition(String paginatorPosition) {
		this.paginatorPosition = paginatorPosition;
	}
	public Plano getPlanoCorrente() {
		return planoCorrente;
	}
	public void setPlanoCorrente(Plano planoCorrente) {
		this.planoCorrente = planoCorrente;
	}
	public ClienteProjeto getClienteProjetoEmContexto() {
		return clienteProjetoEmContexto;
	}
	public void setClienteProjetoEmContexto(
			ClienteProjeto clienteProjetoEmContexto) {
		this.clienteProjetoEmContexto = clienteProjetoEmContexto;
	}
	public Projeto getProjetoEmContexto() {
		return projetoEmContexto;
	}
	public void setProjetoEmContexto(Projeto projetoEmContexto) {
		this.projetoEmContexto = projetoEmContexto;
	}
	public MenuModel getMenu() {
		return menu;
	}
	public void setMenu(MenuModel menu) {
		this.menu = menu;
	}
	
	public Boolean usuarioIsAdmin(){
		if (usuario != null)
			return false;
		if (usuario.getPerfil().getNome().equals("Administrador"))
			return true;
		return false;
	}
	
	public Boolean usuarioIsAdminCliente(){
		if (usuario != null)
			return false;
		if (usuario.getPerfil().getNome().equals("Administrador Cliente"))
			return true;
		return false;
	}
	
	public Boolean usuarioIsBasico(){
		if (usuario != null)
			return false;
		if (usuario.getPerfil().getNome().equals("Básico"))
			return true;
		return false;
	}
	
	public Boolean usuarioByPass(){
		return true;
	}
}
